package com.qf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
//springMVC的基本使用
@Controller //有该注解的类就是一个Servlet，且类似@Component，都是交给spring进行管理
//@RequestMapping("user")
public class UserController {
    //@RequestMapping("login")接收所有类型的请求，请求路径为login
    //也可以用@GetMapping/@PostMapping来接收get或post请求
//    @RequestMapping(value = "login",method = RequestMethod.GET)等同于@GetMapping("login")
    @RequestMapping("login")
    public ModelAndView login(){
        System.out.println("登录");
        //使用ModelAndView类用来存储处理完后的结果数据，以及显示该数据的视图
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/index.jsp");
        return modelAndView;
    }
    //返回值加上redirect就是重定向
    @RequestMapping("login2")
    public String login2(){
        return "redirect:/index.jsp";
    }
    //springMVC接收字符串参数
    @RequestMapping("login3")
    public String login3(String username,String password){
        //在以前我们是通过String username = request.getParamater("username")来获取请求中的参数
        //而在springMVC中会自动接收请求参数，方法的形参就是请求中的参数
        System.out.println(username+password);
        return "/index.jsp";
    }
    //springMVC接收对象参数
    @RequestMapping("login4")
    public String login4(User user){
        //而在springMVC中会自动接收请求中的对象参数并将数据封装形参对象中，前提是属性必须和对象中一致
        System.out.println(user);
        return "/index.jsp";
    }
    //springMVC设置访问静态资源
    @RequestMapping("login5")
    public String login5(User user){
        //需要在spring-context.xml中配置<mvc:default-servlet-handler/>才能访问静态资源
        return "images/a.jpg";
    }

    //springMVC接收json格式数据
    @PostMapping("login6")
    public String login6(@RequestBody User user){
        //如果要接收json格式参数则需要导入Jackson依赖
        //使用postman模仿post请求，传入的是json数据
        //注意方法形参需要加上注解@RequestBody才能接收到请求中的json数据，不然只能获取null
        System.out.println(user);
        return "/index.jsp";
    }
    //将对象转为json格式返回给前端
    @RequestMapping("login7")
    @ResponseBody   //在方法上加上注解@ResponseBody表示将对象转成json格式并返回给前端
    public String login7(){
        User user = new User();
        user.setUsername("wang");
        user.setPassword("111");
        user.setAge(22);
        return "/index.jsp";
    }

    //springMVC默认是非重定向
    @PostMapping("login8")
    public String login8(@RequestBody User user){
        System.out.println(user.getUsername());
        //默认是非重定向
        return "/index.jsp";
        //加redirect表示重定向
//        return "redirect:/index.jsp";
    }
}
